package com.lovo.project.dao;

import com.lovo.project.model.PermissionDO;
import com.lovo.project.model.UserDO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @title 用户持久层接口
 * @author: luo
 * @date: 2020/11/3 11:13
 */
public interface UserDAO {

    /**
     * 添加用户
     * @param userDO 用户对象
     * @return 影响数据库行数
     */
    int insertUser(UserDO userDO);

    /**
     * 按照用户编号修改用户信息
     * @param userId 用户编号
     * @param userDO 修改的用户信息对象
     * @return 影响数据库的行数
     */
    int updateUserById(Integer userId,UserDO userDO);

    /**
     * 查询用户名是否重复
     *
     * @param userName 需要检查的用户名
     * @return 查询到的用户对象
     */
    UserDO selectUserByName(String userName);

    /**
     * 按用户编号删除用户
     * @param userId 用户编号
     * @return 影响数据库的行数
     */
    int deleteUserById(Integer userId);

    /**
     * 按用户名和用户密码查询用户对象
     * @param userName 用户名
     * @param password 用户密码
     * @return 用户登录数据传输对象
     */
    UserDO selectUserByUsernameAndPassword(@Param("userName") String userName,@Param("password") String password);

    /**
     * 根据用户编号查询用户信息
     * @param userId
     * @return
     */
    UserDO selectUserById(Integer userId);

    /**
     * 根据动态信息获得携带用户细节的用户集合
     *
     * @param type 搜索选项
     * @param info 搜索信息
     * @return 携带用户细节的用户集合
     */
    List<UserDO> selectByInfo(@Param("type") String type,@Param("info") String info);

    /**
     * 根据用户编号查询权限
     * @param userId
     * @return
     */
    List<PermissionDO> selectPermissionByUserId(Integer userId);

}
